package com.ship.dispatch.service.fob;

import com.ship.common.core.web.domain.JsonResult;
import com.ship.dispatch.bean.fob.SpFobBaseBean;
import com.ship.dispatch.bean.fob.SpFobFileRecord;
import com.ship.dispatch.bpm.vo.ManageEntityVo;
import com.ship.dispatch.bpm.vo.RebackTaskVo;
import com.ship.dispatch.bpm.vo.dto.RuntimeTaskDto;

import java.io.IOException;
import java.util.List;

/**
 *@title FobService
 *@description
 *@author yl
 *@create 2023/12/14 0014
 */

public interface FobService {

    /**
     * 根据业务key 和 业务类型增加动态变更的审批人员
     * 并计算任务超期时间
     * @param bussenKey
     * @param type
     * @return
     */
    public RuntimeTaskDto getAssigenersAndSetEndDate(String processInstanceId,String taskId,String bussenKey, String type, String expectedLoadingDate,String taskName,String userId);

    /**
     * 流程业务公共维护接口
     * @param manageEntityVo
     * @return
     */
    JsonResult manage(ManageEntityVo manageEntityVo);

    /**
     * 获取船运执行业务表单数据
     * @param key
     * @param id
     * @return
     */
    JsonResult getServiceFormData(String key, String id,Long serviceId);

    /**
     * 根据业务节点获取 节点附件所属类型
     * @param key
     * @return
     */
    String getFileTypeByNodeKey(String key);

    /**
     * 获取邮件模板信息
     * @param manageEntityVo
     * @return
     */
    JsonResult getTemplateInfo(ManageEntityVo manageEntityVo);

    /**
     * 根基业务节点类型获取计算任务时间
     * @param key
     * @return
     */
    String getPlanDateByNodeKey(String key);

    /**
     * 获取船运执行基础信息页面接口
     * @param processInstanceId
     * @return
     */
    JsonResult getFobBaseInfo(String processInstanceId);

    /**
     * 生成文件模板信息
     * @param manageEntityVo
     * @return
     */
    JsonResult getFileTemplateInfo(ManageEntityVo manageEntityVo);

    /**
     * 根据节点类型查询 实例查询 操作人员
     * @param processInstaneId
     * @param nodeType
     * @return
     */
    SpFobBaseBean getAssigenersByNode(String processInstaneId, String nodeType);

    /**
     * 查询合同文件拓扑
     * @param processInstanceId
     * @return
     */
    List<SpFobFileRecord> getBaseCronInfo(String processInstanceId);

    /**
     * 取回任务重写执行
     * @param rebackTaskVo
     * @return
     */
    JsonResult rebackTask(RebackTaskVo rebackTaskVo);

    /**
     * 邮件模板替换获取
     * @param templateId
     * @return
     */
    JsonResult  getEmailTemplateInfo(Long templateId,String pocessInstanceId);

    /**
     * 直接完成任务
     * @param manageEntityVo
     * @return
     */
    JsonResult completeTask(ManageEntityVo manageEntityVo) throws IOException;

    /**
     * 新增表单
     * @param addFromVo
     * @return
     */
    JsonResult addForm(RebackTaskVo addFromVo);

    /**
     * 查询流程业务多实例数据
     * @param key
     * @param processInstaneId
     * @return
     */
    List<Long> findServieData(String key, String processInstaneId);

    /**
     * 查询业务节点类
     * @param s
     * @return
     */
    Class getServiceClass(String s);

    /**
     * 船运执行开启审批操作
     * @param serviceId
     * @param key
     */
    void startApprovalProcess(Long serviceId, String key);

    /**
     *
     * @param businessKey 业务可以
     * @param status
     * @param processDefinitionKey
     * @param serviceType
     */
    void updateApprovaResult(String businessKey, int status, String processDefinitionKey, String serviceType);

    SpFobBaseBean getSpFobBaseBean(String key, String processInstanceId);

    String getExecuteInstance(String serviceType, Long serviceId);
}
